home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1997 May / PC Plus Super CD Issue 127 (May 1997).iso / wacom / setup / setupapi.in_ / setupapi.in
Encoding:
Text File  |  1996-07-29  |  58.4 KB  |  1,883 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_CPU186   = &H0080 '   128
  12. CONST WF_CPU286   = &H0002 '     2
  13. CONST WF_CPU386   = &H0004 '     4
  14. CONST WF_CPU486   = &H0008 '     8
  15. CONST WF_80x87    = &H0400 '  1024
  16. CONST WF_STANDARD = &H0010 '    16
  17. CONST WF_ENHANCED = &H0020 '    32
  18. CONST WF_NT       = &H4000 ' 16384
  19.  
  20. CONST PROCESSOR_INTEL = 0
  21. CONST PROCESSOR_MIPS = 1
  22. CONST PROCESSOR_ALPHA = 2
  23. CONST PROCESSOR_PPC = 3
  24.  
  25. CONST HKEY_CLASSES_ROOT     = &H80000000
  26. CONST HKEY_CURRENT_USER     = &H80000001
  27. CONST HKEY_LOCAL_MACHINE    = &H80000002
  28. CONST HKEY_USERS            = &H80000003
  29. CONST HKEY_PERFORMANCE_DATA = &H80000004
  30. CONST HKEY_CURRENT_CONFIG   = &H80000005
  31. CONST HKEY_DYN_DATA         = &H80000006
  32.  
  33. CONST REG_SZ     = 1
  34. CONST REG_BINARY = 3
  35. CONST REG_DWORD  = 4
  36.  
  37. CONST ERROR_SUCCESS        =   0
  38. CONST ERROR_FILE_NOT_FOUND =   2
  39. CONST ERROR_NO_MORE_ITEMS  = 259
  40.  
  41. '' DoMsgBox Flags
  42.  
  43. CONST MB_OK              = &H0000 '    0
  44. CONST MB_OKCANCEL        = &H0001 '    1
  45. CONST MB_YESNO           = &H0004 '    4
  46. CONST MB_ICONHAND        = &H0010 '   16
  47. CONST MB_ICONQUESTION    = &H0020 '   32
  48. CONST MB_ICONEXCLAMATION = &H0030 '   48
  49. CONST MB_ICONASTERISK    = &H0040 '   64
  50. CONST MB_TASKMODAL       = &H2000 ' 8192
  51.  
  52. CONST IDOK     = 1
  53. CONST IDCANCEL = 2
  54. CONST IDABORT  = 3
  55. CONST IDRETRY  = 4
  56. CONST IDIGNORE = 5
  57. CONST IDYES    = 6
  58. CONST IDNO     = 7
  59.  
  60. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$, lpCaption$, wType%) As INTEGER
  61. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  62. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  63. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  64. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  65. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  66. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  67. DECLARE FUNCTION WinExec LIB "kernel" (szComand$, nShow%) AS INTEGER
  68. DECLARE FUNCTION GetPrivateProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%, szFile$) AS INTEGER
  69. DECLARE FUNCTION WritePrivateProfileString LIB "kernel" (szSect$, szKey$, szString$, szFile$) AS INTEGER
  70. DECLARE FUNCTION RegCloseKey    LIB "shell" (hKey&) AS LONG
  71. DECLARE FUNCTION RegCreateKey   LIB "shell" (hKey&, szSubKey$, hkResult AS POINTER TO LONG) AS LONG
  72. DECLARE FUNCTION RegDeleteKey   LIB "shell" (hKey&, szSubKey$) AS LONG
  73. DECLARE FUNCTION RegDeleteValue LIB "shell" (hKey&, szSubKey$) AS LONG
  74. DECLARE FUNCTION RegEnumKey     LIB "shell" (hKey&, iSubKey&, szName$, chName&) AS LONG
  75. DECLARE FUNCTION RegFlushKey    LIB "shell" (hKey&) AS LONG
  76. DECLARE FUNCTION RegOpenKey     LIB "shell" (hKey&, szSubKey$, hkResult AS POINTER TO LONG) AS LONG
  77. DECLARE FUNCTION RegQueryValue  LIB "shell" (hKey&, szSubKey$, szValue$, cbValue AS POINTER TO LONG) AS LONG
  78. DECLARE FUNCTION RegSetValue    LIB "shell" (hKey&, szSubKey$, dwType&, szData$, cbData&) AS LONG
  79. DECLARE FUNCTION RegSetValueEx  LIB "shell" (hKey&, szSubKey$, Reserved&, dwType&, cbValue AS POINTER TO LONG, cbData&) AS LONG
  80. DECLARE FUNCTION ExitWindowsExec LIB "user" (szBuf1$, szBuf2$) AS INTEGER
  81.  
  82. '**************************************************************************
  83. '****************************** My custom entry points ********************
  84. '**************************************************************************
  85. DECLARE FUNCTION WOWGetNTcpu LIB "mscuistf.dll" AS INTEGER
  86. DECLARE FUNCTION IsAdmin LIB "mscuistf.dll" AS INTEGER
  87. DECLARE FUNCTION AddLines2_mssetup LIB "mscuistf.dll" AS INTEGER
  88.  
  89. '**************************************************************************
  90. '****************************** Setup Constants ***************************
  91. '**************************************************************************
  92.  
  93.  
  94. ''Command Option Flags
  95.  
  96. CONST cmoNone        = 0
  97. CONST cmoVital       = 1
  98. CONST cmoCopy        = 2
  99. CONST cmoUndo        = 4
  100. CONST cmoRoot        = 8
  101. CONST cmoDecompress  = 16
  102. CONST cmoTimeStamp   = 32
  103. CONST cmoReadOnly    = 64
  104. CONST cmoBackup      = 128
  105. CONST cmoForce       = 256
  106. CONST cmoRemove      = 512
  107. CONST cmoOverwrite   = 1024
  108. CONST cmoAppend      = 2048
  109. CONST cmoPrepend     = 4096
  110. CONST cmoAll         = 65535
  111.  
  112.  
  113. ''File Exist Modes
  114.  
  115. CONST femExists     = 0
  116. CONST femRead       = 1
  117. CONST femWrite      = 2
  118. CONST femReadWrite  = 3
  119.  
  120.  
  121. ''Read-Only Return Code
  122.  
  123. CONST ynrcNo         = 0
  124. CONST ynrcYes        = 1
  125. CONST ynrcErr1       = 2
  126. CONST ynrcErr2       = 3
  127. CONST ynrcErr3       = 4
  128. CONST ynrcErr4       = 5
  129. CONST ynrcErr5       = 6
  130. CONST ynrcErr6       = 7
  131. CONST ynrcErr7       = 8
  132. CONST ynrcErr8       = 9
  133. CONST ynrcErr9       = 10
  134.  
  135.  
  136. ''General Return Codes
  137.  
  138. CONST grcOkay       = 0
  139. CONST grcNotOkay    = 1
  140. CONST grcUserQuit   = 48
  141.  
  142.  
  143. ''Ranges
  144.  
  145. ''CONST cbSymValMax = 8192
  146. CONST cbSymValMax = 512
  147.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  148.     '' but we get Out of String Space wattdrvr error if we alloc
  149.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  150.     '' We should look into using dynamic far alloc instead of
  151.     '' STRING$ for large buffers.
  152.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  153.  
  154.  
  155. ''ON ERROR Error Codes
  156. CONST STFERR      = 1024   ''setup system error
  157. CONST STFQUIT     = 1025   ''user quit
  158.  
  159. CONST scmOff      = 0
  160. CONST scmOnIgnore = 1
  161. CONST scmOnFatal  = 2
  162.  
  163.  
  164. '**************************************************************************
  165. '********************************  Setup API's  ***************************
  166. '**************************************************************************
  167.  
  168. '' common
  169.  
  170. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  171. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  172. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  173. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  174. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  175. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  176. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  177. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  178. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  179. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  180. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  181.  
  182.  
  183. ''shell
  184.  
  185. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  186. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  187. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  188. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  189. DECLARE SUB      SetWindowText LIB "User" (hwnd%, lpString$)
  190. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  191. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  192. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  193. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  194. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  195. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  196. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  197. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  198.  
  199.  
  200. ''shell
  201.  
  202. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  203. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  204. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  205.  
  206.  
  207.  
  208. ''install
  209.  
  210. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  211. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  212. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  213. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  214. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  215. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  216. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  217. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  218. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  219. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  220. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  221. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  222. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  223. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  224. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  225. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  226. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  227. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  228. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  229. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  230. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  231. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  232. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  233. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  234. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  235. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  236. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  237. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  238. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  239. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  240. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  241. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  242. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  243. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  244. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  245. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  246. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  247.  
  248. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  249.  
  250.  
  251.  
  252. '*************************************************************************
  253. '****************  Setup Basic Wrapper Declarations  *********************
  254. '*************************************************************************
  255.  
  256.  
  257. ''shell
  258.  
  259. DECLARE SUB      SetBitmap(szDll$, Bitmap%)
  260. DECLARE SUB      SetAbout(szAbout1$, szAbout2$)
  261. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  262. DECLARE SUB      UIPop (n%)
  263. DECLARE SUB      UIPopAll
  264. DECLARE SUB      SetTitle (sz$)
  265. DECLARE SUB      ReadInfFile (szFile$)
  266. DECLARE SUB      SetSymbolValue (szSymbol$, szValue$)
  267. DECLARE SUB      RemoveSymbol (szSym$)
  268. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  269. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  270. DECLARE SUB      MakeListFromSectionKeys (szSymbol$, szSect$)
  271. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  272. DECLARE SUB      AddListItem(szSymbol$, szItem$)
  273. DECLARE SUB      ReplaceListItem(szSymbol$, n%, szItem$)
  274.  
  275. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  276. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  277.  
  278. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  279. DECLARE SUB      RestoreCursor (hPrev%)
  280.  
  281. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  282. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  283.  
  284. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  285. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  286. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  287. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  288.  
  289. DECLARE SUB      MakeListFromSectionDate (szSym$, szSect$)
  290. DECLARE SUB      MakeListFromSectionFilename (szSym$, szSect$)
  291. DECLARE SUB      MakeListFromSectionSize (szSym$, szSect$)
  292. DECLARE SUB      MakeListFromSectionVersion (szSym$, szSect$)
  293.  
  294.  
  295. ''install
  296.  
  297.  
  298. DECLARE SUB      CreateDir (szDir$, cmo%)
  299. DECLARE SUB      RemoveDir (szDir$, cmo%)
  300. DECLARE SUB      AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  301. DECLARE SUB      AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  302. DECLARE SUB      AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  303. DECLARE SUB      CopyFilesInCopyList
  304. DECLARE SUB      RemoveIniSection (szFile$, szSect$, cmo%)
  305. DECLARE SUB      CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  306. DECLARE SUB      RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  307. DECLARE SUB      CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  308. DECLARE SUB      CreateProgmanGroup (szGroup$, szPath$, cmo%)
  309. DECLARE SUB      CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  310. DECLARE SUB      ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  311. DECLARE SUB      StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  312. DECLARE SUB      DumpCopyList (szFile$)
  313. DECLARE SUB      ClearCopyList
  314. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  315. DECLARE SUB      AddDos5Help (szProgName$, szProgHelp$, cmo%)
  316. DECLARE SUB      CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  317. DECLARE SUB      RemoveFile (szFullPathSrc$, cmo%)
  318. DECLARE SUB      BackupFile (szFullPath$, szBackup$)
  319. DECLARE SUB      RenameFile (szFullPath$, szBackup$)
  320. DECLARE SUB      InitInstall
  321. DECLARE SUB      AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  322. DECLARE SUB      AddBlankToBillboardList (lTicks&)
  323. DECLARE SUB      ClearBillboardList
  324. DECLARE SUB      OpenLogFile (szFile$, fAppend%)
  325. DECLARE SUB      CloseLogFile
  326. DECLARE SUB      WriteToLogFile (szStr$)
  327. DECLARE SUB      SetCopyGaugePosition (x%, y%)
  328. DECLARE SUB      SetRestartDir(szDir$)
  329. DECLARE FUNCTION RestartListEmpty AS INTEGER
  330. DECLARE FUNCTION ExitExecRestart AS INTEGER
  331. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  332. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  333. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  334. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  335. DECLARE SUB      PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  336.  
  337.  
  338. '' Error Handling
  339.  
  340. '$ifdef DEBUG
  341.  
  342. '' Setup API Errors
  343. CONST saeFail   = 0
  344. CONST saeInit   = 1
  345. CONST saeNYI    = 3
  346. CONST saeArg    = 4    ''must be max sae value
  347.  
  348. DECLARE SUB      StfApiErr (nMsg%, szApi$, szArgs$)
  349. DECLARE SUB      BadArgErr (nArg%, szApi$, szArgs$)
  350.  
  351. '' chk arg
  352. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  353. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  354. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  355. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  356.  
  357. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  358. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  359.  
  360. '$endif ''DEBUG
  361.  
  362.  
  363.  
  364. '' Windows system detect
  365.  
  366. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  367. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  368. DECLARE FUNCTION GetWindowsMode AS INTEGER
  369. DECLARE FUNCTION GetWindowsDir  AS STRING
  370. DECLARE FUNCTION GetWindowsSysDir AS STRING
  371. DECLARE FUNCTION IsWindowsShared AS INTEGER
  372. DECLARE FUNCTION GetScreenWidth AS INTEGER
  373. DECLARE FUNCTION GetScreenHeight AS INTEGER
  374. DECLARE SUB      FlushIniFile (szFile$)
  375.  
  376.  
  377. '*************************************************************************
  378. '*****************  Setup Basic Wrapper Definitions  *********************
  379. '*************************************************************************
  380. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  381.     fFrameInit = 0
  382.     fInstallInit = 0
  383.  
  384.     IF hSetup > 0 THEN
  385. '$ifdef DEBUG
  386.         StfApiErr saeInit, "InitSetup", szCmdLine$
  387. '$endif ''DEBUG
  388.     END IF
  389.  
  390.     i% = InitFrame(szCmdLine$)
  391.     fFrameInit = 1
  392.  
  393.     InitInstall
  394.     fInstallInit = 1
  395.  
  396.     InitSetup = i%
  397. END FUNCTION
  398.  
  399.  
  400.  
  401. '**************************************************************************
  402. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  403.     IF hSetup > 0 THEN
  404. '$ifdef DEBUG
  405.         StfApiErr saeInit, "InitFrame", szCmdLine$
  406. '$endif ''DEBUG
  407.     ELSE
  408.         i% = InitializeFrame(szCmdLine$)
  409.         IF i% = -1 THEN
  410.             END   '' NOT an error - Usage (/?) or Command line copy operation
  411.         ELSEIF i% = 0 THEN
  412. '$ifdef DEBUG
  413.             StfApiErr saeFail, "InitFrame", szCmdLine$
  414. '$endif ''DEBUG
  415.             END
  416.         ELSE
  417.             InitFrame = i%
  418.         END IF
  419.     END IF
  420. END FUNCTION
  421.  
  422.  
  423. '**************************************************************************
  424. SUB SetBitmap(szDll$, Bitmap%) STATIC
  425.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  426. '$ifdef DEBUG
  427.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  428. '$endif ''DEBUG
  429.         ERROR STFERR
  430.     END IF
  431. END SUB
  432.  
  433.  
  434. '**************************************************************************
  435. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  436.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  437. '$ifdef DEBUG
  438.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  439. '$endif ''DEBUG
  440.         ERROR STFERR
  441.     END IF
  442. END SUB
  443.  
  444.  
  445. '*************************************************************************
  446. SUB SetTitle(sz$) STATIC
  447.     SetWindowText HwndFrame(), sz$
  448. END SUB
  449.  
  450.  
  451. '*************************************************************************
  452. SUB ReadInfFile (szFile$) STATIC
  453. '$ifdef DEBUG
  454.     if FValidFATPath(szFile$) = 0 then
  455.         BadArgErr 1, "ReadInfFile", szFile$
  456.     end if
  457.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  458.         StfApiErr saeFail, "ReadInfFile", szFile$
  459. '$else  ''!DEBUG
  460.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  461. '$endif ''!DEBUG
  462.         ERROR STFERR
  463.     END IF
  464. END SUB
  465.  
  466.  
  467. '*************************************************************************
  468. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  469. '$ifdef DEBUG
  470.     if szDll$ = "" then
  471.         n% = 1
  472.     elseif szDlgProc$ = "" then
  473.         n% = 3
  474.     else
  475.         n% = 0
  476.     end if
  477.     if n% > 0 then
  478.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  479.     end if
  480. '$endif ''DEBUG
  481.  
  482.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  483. '$ifdef DEBUG
  484.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  485. '$endif ''DEBUG
  486.         ERROR STFERR
  487.     ELSE
  488.         UIStartDlg = GetSymbolValue("DLGEVENT")
  489.     END IF
  490. END FUNCTION
  491.  
  492.  
  493. '*************************************************************************
  494. SUB UIPop (n%) STATIC
  495.     IF FKillNDialogs(n%) = 0 THEN
  496. '$ifdef DEBUG
  497.         StfApiErr saeFail, "UIPop", STR$(n%)
  498. '$endif ''DEBUG
  499.         ERROR STFERR
  500.     END IF
  501. END SUB
  502.  
  503.  
  504. '*************************************************************************
  505. SUB UIPopAll STATIC
  506.     IF FKillNDialogs(65535) = 0 THEN
  507. '$ifdef DEBUG
  508.         StfApiErr saeFail, "UIPopAll", ""
  509. '$endif ''DEBUG
  510.         ERROR STFERR
  511.     END IF
  512. END SUB
  513.  
  514.  
  515. '*************************************************************************
  516. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  517. '$ifdef DEBUG
  518.     if szSymbol$ = "" then
  519.         BadArgErr 1, "GetSymbolValue", szSymbol$
  520.     end if
  521. '$endif ''DEBUG
  522.     szValue$ = string$(cbSymValMax,32)
  523.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  524.     GetSymbolValue = szValue$
  525.     IF Length% >= cbSymValMax THEN
  526.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  527.         ERROR STFERR
  528.     END IF
  529.     IF szSymbol$ = "" THEN
  530.         ERROR STFERR
  531.     END IF
  532.     szValue$ = ""
  533. END FUNCTION
  534.  
  535.  
  536. '*************************************************************************
  537. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  538. '$ifdef DEBUG
  539.     if szSymbol$ = "" then
  540.         BadArgErr 1, "GetListLength", szSymbol$
  541.     end if
  542. '$endif ''DEBUG
  543.     GetListLength = UsGetListLength(szSymbol$)
  544.     IF szSymbol$ = "" THEN
  545.         ERROR STFERR
  546.     END IF
  547. END FUNCTION
  548.  
  549.  
  550. '*************************************************************************
  551. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  552. '$ifdef DEBUG
  553.     if szListSymbol$ = "" then
  554.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  555.     end if
  556.  
  557.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  558.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  559.     end if
  560. '$endif ''DEBUG
  561.  
  562.     szListItem$ = string$(cbSymValMax,32)
  563.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  564.     GetListItem = szListItem$
  565.     IF Length% >= cbSymValMax THEN
  566.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  567.         ERROR STFERR
  568.     END IF
  569.     IF szListSymbol$ = "" THEN
  570.         ERROR STFERR
  571.     END IF
  572.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  573.         ERROR STFERR
  574.     end if
  575.     szListItem$ = ""
  576. END FUNCTION
  577.  
  578.  
  579. '*************************************************************************
  580. SUB AddListItem(szSymbol$, szItem$) STATIC
  581. '$ifdef DEBUG
  582.     if szSymbol$ = "" then
  583.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  584.     end if
  585. '$endif ''DEBUG
  586.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  587. '$ifdef DEBUG
  588.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  589. '$endif ''DEBUG
  590.         ERROR STFERR
  591.     END IF
  592. END SUB
  593.  
  594.  
  595. '*************************************************************************
  596. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  597. '$ifdef DEBUG
  598.     if szSymbol$ = "" then
  599.         nArg% = 1
  600.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  601.         nArg% = 2
  602.     else
  603.         nArg% = 0
  604.     end if
  605.     if nArg% > 0 then
  606.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  607.     end if
  608. '$endif ''DEBUG
  609.  
  610.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  611. '$ifdef DEBUG
  612.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  613. '$endif ''DEBUG
  614.         ERROR STFERR
  615.     END IF
  616. END SUB
  617.  
  618.  
  619. '**************************************************************************
  620. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  621. '$ifdef DEBUG
  622.     if szSymbol$ = "" then
  623.         n% = 1
  624.     elseif FValidInfSect(szSect$) = 0 then
  625.         n% = 2
  626.     else
  627.         n% = 0
  628.     end if
  629.     if n% > 0 then
  630.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  631.     end if
  632. '$endif ''DEBUG
  633.  
  634.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  635. '$ifdef DEBUG
  636.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  637. '$endif ''DEBUG
  638.         ERROR STFERR
  639.     END IF
  640. END SUB
  641.  
  642.  
  643. '*************************************************************************
  644. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  645. '$ifdef DEBUG
  646.     if szSymbol$ = "" then
  647.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  648.     end if
  649. '$endif ''DEBUG
  650.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  651. '$ifdef DEBUG
  652.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  653. '$endif ''DEBUG
  654.         ERROR STFERR
  655.     END IF
  656. END SUB
  657.  
  658.  
  659. '*************************************************************************
  660. SUB RemoveSymbol(szSym$) STATIC
  661. '$ifdef DEBUG
  662.     if szSym$ = "" then
  663.         BadArgErr 1, "RemoveSymbol", szSym$
  664.     end if
  665. '$endif ''DEBUG
  666.     IF FRemoveSymbol(szSym$) = 0 THEN
  667. '$ifdef DEBUG
  668.         StfApiErr saeFail, "RemoveSymbol", szSym$
  669. '$endif ''DEBUG
  670.         ERROR STFERR
  671.     END IF
  672. END SUB
  673.  
  674.  
  675. '*************************************************************************
  676. FUNCTION ShowWaitCursor STATIC AS INTEGER
  677.     ShowWaitCursor = HShowWaitCursor
  678. END FUNCTION
  679.  
  680.  
  681. '*************************************************************************
  682. SUB RestoreCursor (hPrev%) STATIC
  683.     i% = FRestoreCursor(hPrev%)
  684.     IF i% = 0 THEN
  685. '$ifdef DEBUG
  686.         StfApiErr saeFail, "RestoreCursor", ""
  687. '$endif ''DEBUG
  688.         ERROR STFERR
  689.     END IF
  690. END SUB
  691.  
  692.  
  693. '*************************************************************************
  694. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  695.     SetBeepingMode = FSetBeepingMode(mode%)
  696. END FUNCTION
  697.  
  698.  
  699. '*************************************************************************
  700. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  701.     SetSilentMode = FSetSilent(mode%)
  702. END FUNCTION
  703.  
  704.  
  705. '*************************************************************************
  706. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  707. '$ifdef DEBUG
  708.     if FValidInfSect(szSect$) = 0 then
  709.         n% = 1
  710.     elseif szKey$ = "" then
  711.         n% = 2
  712.     else
  713.         n% = 0
  714.     end if
  715.     if n% > 0 then
  716.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  717.     end if
  718. '$endif ''DEBUG
  719.  
  720.     szBuf$ = string$(128, 32)
  721.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  722.     IF Length% >= 128 THEN
  723.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  724.         ERROR STFERR
  725.     END IF
  726.  
  727.     IF Length% = -1 THEN
  728. '$ifdef DEBUG
  729.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  730. '$endif ''DEBUG
  731.         ERROR STFERR
  732.     END IF
  733.  
  734.     GetSectionKeyDate = szBuf$
  735.     szBuf$ = ""
  736. END FUNCTION
  737.  
  738.  
  739. '*************************************************************************
  740. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  741. '$ifdef DEBUG
  742.     if FValidInfSect(szSect$) = 0 then
  743.         n% = 1
  744.     elseif szKey$ = "" then
  745.         n% = 2
  746.     else
  747.         n% = 0
  748.     end if
  749.     if n% > 0 then
  750.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  751.     end if
  752. '$endif ''DEBUG
  753.  
  754.     szBuf$ = string$(128, 32)
  755.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  756.     IF Length% >= 128 THEN
  757.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  758.         ERROR STFERR
  759.     END IF
  760.  
  761.     IF Length% = -1 THEN
  762. '$ifdef DEBUG
  763.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  764. '$endif ''DEBUG
  765.         ERROR STFERR
  766.     END IF
  767.  
  768.     GetSectionKeyFilename = szBuf$
  769.     szBuf$ = ""
  770. END FUNCTION
  771.  
  772.  
  773. '*************************************************************************
  774. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  775. '$ifdef DEBUG
  776.     if FValidInfSect(szSect$) = 0 then
  777.         n% = 1
  778.     elseif szKey$ = "" then
  779.         n% = 2
  780.     else
  781.         n% = 0
  782.     end if
  783.     if n% > 0 then
  784.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  785.     end if
  786. '$endif ''DEBUG
  787.  
  788.     szBuf$ = string$(128, 32)
  789.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  790.     IF Length% >= 128 THEN
  791.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  792.         ERROR STFERR
  793.     END IF
  794.  
  795.     IF Length% = -1 THEN
  796. '$ifdef DEBUG
  797.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  798. '$endif ''DEBUG
  799.         ERROR STFERR
  800.     END IF
  801.  
  802.     GetSectionKeySize = VAL(szBuf$)
  803.     szBuf$ = ""
  804. END FUNCTION
  805.  
  806.  
  807. '*************************************************************************
  808. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  809. '$ifdef DEBUG
  810.     if FValidInfSect(szSect$) = 0 then
  811.         n% = 1
  812.     elseif szKey$ = "" then
  813.         n% = 2
  814.     else
  815.         n% = 0
  816.     end if
  817.     if n% > 0 then
  818.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  819.     end if
  820. '$endif ''DEBUG
  821.  
  822.     szBuf$ = string$(128, 32)
  823.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  824.     IF Length% >= 128 THEN
  825.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  826.         ERROR STFERR
  827.     END IF
  828.  
  829.     IF Length% = -1 THEN
  830. '$ifdef DEBUG
  831.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  832. '$endif ''DEBUG
  833.         ERROR STFERR
  834.     END IF
  835.  
  836.     GetSectionKeyVersion = szBuf$
  837.     szBuf$ = ""
  838. END FUNCTION
  839.  
  840.  
  841. '*************************************************************************
  842. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  843. '$ifdef DEBUG
  844.     if szSym$ = "" then
  845.         n% = 1
  846.     elseif FValidInfSect(szSect$) = 0 then
  847.         n% = 2
  848.     else
  849.         n% = 0
  850.     end if
  851.     if n% > 0 then
  852.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  853.     end if
  854. '$endif ''DEBUG
  855.  
  856.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  857. '$ifdef DEBUG
  858.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  859. '$endif ''DEBUG
  860.         ERROR STFERR
  861.     END IF
  862. END SUB
  863.  
  864.  
  865. '*************************************************************************
  866. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  867. '$ifdef DEBUG
  868.     if szSym$ = "" then
  869.         n% = 1
  870.     elseif FValidInfSect(szSect$) = 0 then
  871.         n% = 2
  872.     else
  873.         n% = 0
  874.     end if
  875.     if n% > 0 then
  876.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  877.     end if
  878. '$endif ''DEBUG
  879.  
  880.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  881. '$ifdef DEBUG
  882.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  883. '$endif ''DEBUG
  884.         ERROR STFERR
  885.     END IF
  886. END SUB
  887.  
  888.  
  889. '*************************************************************************
  890. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  891. '$ifdef DEBUG
  892.     if szSym$ = "" then
  893.         n% = 1
  894.     elseif FValidInfSect(szSect$) = 0 then
  895.         n% = 2
  896.     else
  897.         n% = 0
  898.     end if
  899.     if n% > 0 then
  900.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  901.     end if
  902. '$endif ''DEBUG
  903.  
  904.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  905. '$ifdef DEBUG
  906.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  907. '$endif ''DEBUG
  908.         ERROR STFERR
  909.     END IF
  910. END SUB
  911.  
  912.  
  913. '*************************************************************************
  914. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  915. '$ifdef DEBUG
  916.     if szSym$ = "" then
  917.         n% = 1
  918.     elseif FValidInfSect(szSect$) = 0 then
  919.         n% = 2
  920.     else
  921.         n% = 0
  922.     end if
  923.     if n% > 0 then
  924.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  925.     end if
  926. '$endif ''DEBUG
  927.  
  928.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  929. '$ifdef DEBUG
  930.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  931. '$endif ''DEBUG
  932.         ERROR STFERR
  933.     END IF
  934. END SUB
  935.  
  936.  
  937. '*************************************************************************
  938. SUB InitInstall STATIC
  939.     IF hSetup > 0 THEN
  940. '$ifdef DEBUG
  941.         StfApiErr saeInit, "InitInstall", ""
  942. '$endif ''DEBUG
  943.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  944. '$ifdef DEBUG
  945.         StfApiErr saeFail, "InitInstall", ""
  946. '$endif ''DEBUG
  947.         END
  948.     END IF
  949. END SUB
  950.  
  951.  
  952. '*************************************************************************
  953. SUB CreateDir (szDir$, cmo%) STATIC
  954. '$ifdef DEBUG
  955.     if FValidFATDir(szDir$) = 0 then
  956.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  957.     end if
  958. '$endif ''DEBUG
  959.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  960. '$ifdef DEBUG
  961.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  962. '$endif ''DEBUG
  963.         ERROR STFERR
  964.     END IF
  965. END SUB
  966.  
  967.  
  968. '*************************************************************************
  969. SUB RemoveDir (szDir$, cmo%) STATIC
  970. '$ifdef DEBUG
  971.     if FValidFATDir(szDir$) = 0 then
  972.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  973.     end if
  974. '$endif ''DEBUG
  975.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  976. '$ifdef DEBUG
  977.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  978. '$endif ''DEBUG
  979.         ERROR STFERR
  980.     END IF
  981. END SUB
  982.  
  983.  
  984.  
  985. '*************************************************************************
  986. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  987. '$ifdef DEBUG
  988.     if FValidIniFile(szFile$) = 0 then
  989.         n% = 1
  990.     elseif FValidInfSect(szSect$) = 0 then
  991.         n% = 2
  992.     else
  993.         n% = 0
  994.     end if
  995.     if n% > 0 then
  996.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  997.     end if
  998. '$endif ''DEBUG
  999.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  1000. ''    IF WritePrivateProfileString(szSect$, NULL, NULL, szFile$) = 0 THEN
  1001. '$ifdef DEBUG
  1002.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  1003. '$endif ''DEBUG
  1004.         ERROR STFERR
  1005.     END IF
  1006.     FlushIniFile(szFile$)
  1007. END SUB
  1008.  
  1009.  
  1010. '*************************************************************************
  1011. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1012. '$ifdef DEBUG
  1013.     if FValidIniFile(szFile$) = 0 then
  1014.         n% = 1
  1015.     elseif FValidInfSect(szSect$) = 0 then
  1016.         n% = 2
  1017.     else
  1018.         n% = 0
  1019.     end if
  1020.     if n% > 0 then
  1021.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1022.     end if
  1023. '$endif ''DEBUG
  1024. ''    cb% = 512
  1025. ''    szBuf$ = STRING$(cb%, 32)
  1026. ''    cbRet% = GetPrivateProfileString(szSect$, szKey$, "", szBuf$, cb%, szFile$)
  1027. ''    n% = 1
  1028. ''    IF szBuf$ <> "" THEN
  1029. ''        ovr% = cmo% AND cmoOverwrite
  1030. ''        IF ovr% = 0 THEN
  1031. ''            n% = 0
  1032. ''        ELSE
  1033. ''            n% = WritePrivateProfileString(szSect$, szKey$, NULL, szFile$)
  1034. ''            n% = WritePrivateProfileString(szSect$, szKey$, szValue$, szFile$)
  1035. ''        END IF
  1036. ''    ELSE
  1037. ''        n% = WritePrivateProfileString(szSect$, szKey$, szValue$, szFile$)
  1038. ''    END IF
  1039.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1040. ''    IF n% = 0 THEN
  1041. '$ifdef DEBUG
  1042.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1043. '$endif ''DEBUG
  1044.         ERROR STFERR
  1045.      END IF
  1046.      FlushIniFile(szFile$)
  1047. END SUB
  1048.  
  1049.  
  1050. '*************************************************************************
  1051. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  1052. '$ifdef DEBUG
  1053.     if FValidIniFile(szFile$) = 0 then
  1054.         n% = 1
  1055.     elseif FValidInfSect(szSect$) = 0 then
  1056.         n% = 2
  1057.     elseif szKey$ = "" then
  1058.         n% = 3
  1059.     else
  1060.         n% = 0
  1061.     end if
  1062.     if n% > 0 then
  1063.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1064.     end if
  1065. '$endif ''DEBUG
  1066.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1067. ''    IF WritePrivateProfileString(szSect$, szKey$, NULL, szFile$) = 0 THEN
  1068. '$ifdef DEBUG
  1069.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1070. '$endif ''DEBUG
  1071.         ERROR STFERR
  1072.     END IF
  1073.     FlushIniFile(szFile$)
  1074. END SUB
  1075.  
  1076.  
  1077. '*************************************************************************
  1078. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1079. '$ifdef DEBUG
  1080.     if FValidFATPath(szFile$) = 0 then
  1081.         n% = 1
  1082.     elseif FValidInfSect(szSect$) = 0 then
  1083.         n% = 2
  1084.     elseif szKey$ = "" then
  1085.         n% = 3
  1086.     else
  1087.         n% = 0
  1088.     end if
  1089.     if n% > 0 then
  1090.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1091.     end if
  1092. '$endif ''DEBUG
  1093.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1094. ''    IF WritePrivateProfileString(szSect$, szKey$, szValue$, szFile$) = 0 THEN
  1095. '$ifdef DEBUG
  1096.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1097. '$endif ''DEBUG
  1098.         ERROR STFERR
  1099.     END IF
  1100.     FlushIniFile(szFile$)
  1101. END SUB
  1102.  
  1103.  
  1104. '*************************************************************************
  1105. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1106. '$ifdef DEBUG
  1107.     if szGroup$ = "" or len(szGroup$) > 24 then
  1108.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1109.     end if
  1110. '$endif ''DEBUG
  1111.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1112. '$ifdef DEBUG
  1113.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1114. '$endif ''DEBUG
  1115.         ERROR STFERR
  1116.     END IF
  1117. END SUB
  1118.  
  1119.  
  1120. '*************************************************************************
  1121. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1122. '$ifdef DEBUG
  1123.     if szGroup$ = "" or len(szGroup$) > 24 then
  1124.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1125.     end if
  1126. '$endif ''DEBUG
  1127.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1128. '$ifdef DEBUG
  1129.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1130. '$endif ''DEBUG
  1131.         ERROR STFERR
  1132.     END IF
  1133. END SUB
  1134.  
  1135.  
  1136. '*************************************************************************
  1137. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1138. '$ifdef DEBUG
  1139.     if FValidInfSect(szSect$) = 0 then
  1140.         n% = 1
  1141.     elseif szKey$ = "" then
  1142.         n% = 2
  1143.     elseif FValidFATDir(szDst$) = 0 then
  1144.         n% = 3
  1145.     else
  1146.         n% = 0
  1147.     end if
  1148.     if n% > 0 then
  1149.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1150.     end if
  1151. '$endif ''DEBUG
  1152.  
  1153.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1154. '$ifdef DEBUG
  1155.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1156. '$endif ''DEBUG
  1157.         ERROR STFERR
  1158.     END IF
  1159. END SUB
  1160.  
  1161.  
  1162. '*************************************************************************
  1163. SUB DumpCopyList (szFile$) STATIC
  1164. '$ifdef DEBUG
  1165.     if szFile$ = "" then
  1166.         BadArgErr 1, "DumpCopyList", szFile$
  1167.     end if
  1168. '$endif ''DEBUG
  1169.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1170. '$ifdef DEBUG
  1171.         StfApiErr saeFail, "DumpCopyList", szFile$
  1172. '$endif ''DEBUG
  1173.         ERROR STFERR
  1174.     END IF
  1175. END SUB
  1176.  
  1177.  
  1178. '*************************************************************************
  1179. SUB ClearCopyList STATIC
  1180.     ResetCopyList
  1181. END SUB
  1182.  
  1183.  
  1184. '*************************************************************************
  1185. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1186.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1187.     IF lNeed& < 0 THEN
  1188. '$ifdef DEBUG
  1189.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1190. '$endif ''DEBUG
  1191.         ERROR STFERR
  1192.     END IF
  1193.     GetCopyListCost = lNeed&
  1194. END FUNCTION
  1195.  
  1196.  
  1197. '*************************************************************************
  1198. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1199.     szItemNew$ = szItem$
  1200.     IF szOther$ <> "" THEN
  1201.         szItemNew$ = szItem$ + "," + szOther$
  1202.     END IF
  1203. '$ifdef DEBUG
  1204.     if szGroup$ = "" or len(szGroup$) > 24 then
  1205.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1206.     end if
  1207. '$endif ''DEBUG
  1208.  
  1209.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1210. '$ifdef DEBUG
  1211.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1212. '$endif ''DEBUG
  1213.         ERROR STFERR
  1214.     END IF
  1215.     szItemNew$ = ""
  1216. END SUB
  1217.  
  1218.  
  1219. '*************************************************************************
  1220. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1221. '$ifdef DEBUG
  1222.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1223.         n% = 1
  1224.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1225.         n% = 1
  1226.     elseif szProgHelp$ = "" then
  1227.         n% = 2
  1228.     else
  1229.         n% = 0
  1230.     end if
  1231.     if n% > 0 then
  1232.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1233.     end if
  1234. '$endif ''DEBUG
  1235.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1236. '$ifdef DEBUG
  1237.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1238. '$endif ''DEBUG
  1239.         ERROR STFERR
  1240.     END IF
  1241. END SUB
  1242.  
  1243.  
  1244. '*************************************************************************
  1245. SUB CopyFilesInCopyList STATIC
  1246.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1247.  
  1248.     IF grc% = grcUserQuit THEN
  1249.         ERROR STFQUIT
  1250.     ELSEIF grc% > 0 THEN
  1251. '$ifdef DEBUG
  1252.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1253. '$endif ''DEBUG
  1254.         ERROR STFERR
  1255.     END IF
  1256. END SUB
  1257.  
  1258.  
  1259. '*************************************************************************
  1260. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1261. '$ifdef DEBUG
  1262.     if FValidFATPath(szFullPathSrc$) = 0 then
  1263.         n% = 1
  1264.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1265.         n% = 2
  1266.     else
  1267.         n% = 0
  1268.     end if
  1269.     if n% > 0 then
  1270.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1271.     end if
  1272. '$endif ''DEBUG
  1273.  
  1274.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1275. '$ifdef DEBUG
  1276.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1277. '$endif ''DEBUG
  1278.         ERROR STFERR
  1279.     END IF
  1280. END SUB
  1281.  
  1282.  
  1283.  
  1284. '*************************************************************************
  1285. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1286. '$ifdef DEBUG
  1287.     if FValidFATPath(szFullPathSrc$) = 0 then
  1288.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1289.     end if
  1290. '$endif ''DEBUG
  1291.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1292. '$ifdef DEBUG
  1293.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1294. '$endif ''DEBUG
  1295.         ERROR STFERR
  1296.     END IF
  1297. END SUB
  1298.  
  1299.  
  1300. '*************************************************************************
  1301. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1302. '$ifdef DEBUG
  1303.     if FValidFATPath(szFullPath$) = 0 then
  1304.         n% = 1
  1305.     elseif szBackup$ = "" then
  1306.         n% = 2
  1307.     else
  1308.         n% = 0
  1309.     end if
  1310.     if n% > 0 then
  1311.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1312.     end if
  1313. '$endif ''DEBUG
  1314.  
  1315.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1316. '$ifdef DEBUG
  1317.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1318. '$endif ''DEBUG
  1319.         ERROR STFERR
  1320.     END IF
  1321. END SUB
  1322.  
  1323.  
  1324. '*************************************************************************
  1325. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1326. '$ifdef DEBUG
  1327.     if FValidFATPath(szFullPath$) = 0 then
  1328.         n% = 1
  1329.     elseif szBackup$ = "" then
  1330.         n% = 2
  1331.     else
  1332.         n% = 0
  1333.     end if
  1334.     if n% > 0 then
  1335.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1336.     end if
  1337. '$endif ''DEBUG
  1338.  
  1339.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1340. '$ifdef DEBUG
  1341.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1342. '$endif ''DEBUG
  1343.         ERROR STFERR
  1344.     END IF
  1345. END SUB
  1346.  
  1347.  
  1348. '*************************************************************************
  1349. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1350. '$ifdef DEBUG
  1351.     if FValidInfSect(szSect$) = 0 then
  1352.         n% = 1
  1353.     elseif FValidFATDir(szSrc$) = 0 then
  1354.         n% = 2
  1355.     elseif FValidFATDir(szDest$) = 0 then
  1356.         n% = 3
  1357.     else
  1358.         n% = 0
  1359.     end if
  1360.     if n% > 0 then
  1361.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1362.     end if
  1363. '$endif ''DEBUG
  1364.  
  1365.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1366. '$ifdef DEBUG
  1367.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1368. '$endif ''DEBUG
  1369.         ERROR STFERR
  1370.     END IF
  1371. END SUB
  1372.  
  1373.  
  1374. '*************************************************************************
  1375. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1376. '$ifdef DEBUG
  1377.     if FValidInfSect(szSect$) = 0 then
  1378.         n% = 1
  1379.     elseif szKey$ = "" then
  1380.         n% = 2
  1381.     elseif FValidFATDir(szSrc$) = 0 then
  1382.         n% = 3
  1383.     elseif FValidFATDir(szDest$) = 0 then
  1384.         n% = 4
  1385.     else
  1386.         n% = 0
  1387.     end if
  1388.     if n% > 0 then
  1389.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1390.     end if
  1391. '$endif ''DEBUG
  1392.  
  1393.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1394. '$ifdef DEBUG
  1395.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1396. '$endif ''DEBUG
  1397.         ERROR STFERR
  1398.     END IF
  1399. END SUB
  1400.  
  1401.  
  1402. '*************************************************************************
  1403. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1404. '$ifdef DEBUG
  1405.     if FValidInfSect(szSect$) = 0 then
  1406.         n% = 1
  1407.     elseif szKey$ = "" then
  1408.         n% = 2
  1409.     elseif FValidFATDir(szSrc$) = 0 then
  1410.         n% = 3
  1411.     elseif FValidFATPath(szDest$) = 0 then
  1412.         n% = 4
  1413.     else
  1414.         n% = 0
  1415.     end if
  1416.     if n% > 0 then
  1417.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1418.     end if
  1419. '$endif ''DEBUG
  1420.  
  1421.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1422. '$ifdef DEBUG
  1423.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1424. '$endif ''DEBUG
  1425.         ERROR STFERR
  1426.     END IF
  1427. END SUB
  1428.  
  1429.  
  1430. '*************************************************************************
  1431. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1432. '$ifdef DEBUG
  1433.     if szDll$ = "" then
  1434.         n% = 1
  1435.     elseif idDlg% = 0 then
  1436.         n% = 2
  1437.     elseif szProc$ = "" then
  1438.         n% = 3
  1439.     elseif lTicks& <= 0 then
  1440.         n% = 4
  1441.     else
  1442.         n% = 0
  1443.     end if
  1444.     if n% > 0 then
  1445.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1446.     end if
  1447. '$endif ''DEBUG
  1448.  
  1449.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1450. '$ifdef DEBUG
  1451.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1452. '$endif ''DEBUG
  1453.         ERROR STFERR
  1454.     END IF
  1455. END SUB
  1456.  
  1457.  
  1458. '*************************************************************************
  1459. SUB AddBlankToBillboardList (lTicks&) STATIC
  1460. '$ifdef DEBUG
  1461.     if lTicks& <= 0 then
  1462.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1463.     end if
  1464. '$endif ''DEBUG
  1465.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1466. '$ifdef DEBUG
  1467.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1468. '$endif ''DEBUG
  1469.         ERROR STFERR
  1470.     END IF
  1471. END SUB
  1472.  
  1473.  
  1474. '*************************************************************************
  1475. SUB ClearBillboardList STATIC
  1476.     IF FClearBillboardList = 0 THEN
  1477. '$ifdef DEBUG
  1478.         StfApiErr saeFail, "ClearBillboardList", ""
  1479. '$endif ''DEBUG
  1480.         ERROR STFERR
  1481.     END IF
  1482. END SUB
  1483.  
  1484.  
  1485. '*************************************************************************
  1486. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1487. '$ifdef DEBUG
  1488.     if FValidFATPath(szFile$) = 0 then
  1489.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1490.     end if
  1491. '$endif ''DEBUG
  1492.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1493. '$ifdef DEBUG
  1494.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1495. '$endif ''DEBUG
  1496.         ERROR STFERR
  1497.     END IF
  1498. END SUB
  1499.  
  1500.  
  1501. '*************************************************************************
  1502. SUB CloseLogFile STATIC
  1503.     IF FCloseLogFile() = 0 THEN
  1504. '$ifdef DEBUG
  1505.         StfApiErr saeFail, "CloseLogFile", ""
  1506. '$endif ''DEBUG
  1507.         ERROR STFERR
  1508.     END IF
  1509. END SUB
  1510.  
  1511.  
  1512. '*************************************************************************
  1513. SUB WriteToLogFile (szStr$) STATIC
  1514.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1515. '$ifdef DEBUG
  1516.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1517. '$endif ''DEBUG
  1518.         ERROR STFERR
  1519.     END IF
  1520. END SUB
  1521.  
  1522.  
  1523. ''' -1 in either parameter will mean 'center in frame client area'
  1524. '*************************************************************************
  1525. SUB SetCopyGaugePosition (x%, y%) STATIC
  1526.     ProSetPos x%, y%
  1527. END SUB
  1528.  
  1529.  
  1530. '*************************************************************************
  1531. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1532.     szBuf$ = STRING$(512, 32)
  1533.  
  1534.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1535.     IF wRet% = 0 THEN
  1536.         FindFileUsingFileOpen = szBuf$
  1537.     ELSEIF wRet% = 1 THEN
  1538.         FindFileUsingFileOpen = ""
  1539.     ELSE
  1540. '$ifdef DEBUG
  1541.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1542. '$endif ''DEBUG
  1543.         ERROR STFERR
  1544.     END IF
  1545.  
  1546.     szBuf$ = ""
  1547. END FUNCTION
  1548.  
  1549.  
  1550. '*************************************************************************
  1551. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1552.     IsDirWritable = FIsDirWritable(szDir$)
  1553. END FUNCTION
  1554.  
  1555.  
  1556. '*************************************************************************
  1557. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1558. '$ifdef DEBUG
  1559.     if FValidFATDir(szFile$) = 0 then
  1560.         BadArgErr 1, "IsFileWritable", szFile$
  1561.     end if
  1562. '$endif ''DEBUG
  1563.     IsFileWritable = FIsFileWritable(szFile$)
  1564. END FUNCTION
  1565.  
  1566.  
  1567. '*************************************************************************
  1568. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1569.     IF iField% < 1 THEN
  1570. '$ifdef DEBUG
  1571.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1572. '$endif ''DEBUG
  1573.         ERROR STFERR
  1574.     END IF
  1575.     szStart$ = szLine$
  1576.     IF iField% <> 1 THEN
  1577.         FOR i% = 2 TO iField% STEP 1
  1578.             iNew% = INSTR(szStart$, ",")
  1579.             IF iNew% = 0 THEN
  1580.                 GetNthFieldFromIniString = ""
  1581.                 GOTO _GNFFIS_END
  1582.             END IF
  1583.             szStart$ = MID$(szStart$, (iNew% + 1))
  1584.         NEXT
  1585.     END IF
  1586.  
  1587.     iNew% = INSTR(szStart$, ",")
  1588.     IF iNew% <> 0 THEN
  1589.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1590.     END IF
  1591.  
  1592.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1593.  
  1594. _GNFFIS_END:
  1595.  
  1596. END FUNCTION
  1597.  
  1598.  
  1599. '*************************************************************************
  1600. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1601.     GetWindowsMajorVersion = GetVersion() MOD 256
  1602. END FUNCTION
  1603.  
  1604.  
  1605. '*************************************************************************
  1606. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1607.     GetWindowsMinorVersion = GetVersion() / 256
  1608. END FUNCTION
  1609.  
  1610.  
  1611. '*************************************************************************
  1612. FUNCTION GetWindowsMode STATIC AS INTEGER
  1613.     GetWindowsMode = 0
  1614.     longTmp& = GetWinFlags()
  1615.     IF longTmp& AND WF_NT THEN
  1616.         GetWindowsMode = 4
  1617.     ELSEIF longTmp& AND WF_STANDARD THEN
  1618.         GetWindowsMode = 1
  1619.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1620.         GetWindowsMode = 2
  1621.     END IF
  1622. END FUNCTION
  1623.  
  1624.  
  1625. '*************************************************************************
  1626. FUNCTION GetWindowsDir STATIC AS STRING
  1627.     szBuf$ = string$(256, 32)
  1628.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1629.  
  1630.     IF cbBuf% = 0 THEN
  1631.         GetWindowsDir = ""
  1632. '$ifdef DEBUG
  1633.         StfApiErr saeFail, "GetWindowsDir", ""
  1634. '$endif ''DEBUG
  1635.         ERROR STFERR
  1636.     ELSE
  1637.         IF cbBuf% > 255 THEN
  1638.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1639.             ERROR STFERR
  1640.         END IF
  1641.         szBuf$ = RTRIM$(szBuf$)
  1642.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1643.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1644.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1645.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1646.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1647.         END IF
  1648.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1649.             szBuf$ = szBuf$ + "\"
  1650.         END IF
  1651.         GetWindowsDir = szBuf$
  1652.     END IF
  1653.  
  1654.     szBuf$ = ""
  1655. END FUNCTION
  1656.  
  1657.  
  1658. '*************************************************************************
  1659. FUNCTION GetWindowsSysDir STATIC AS STRING
  1660.     szBuf$ = string$(256, 32)
  1661.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1662.  
  1663.     IF cbBuf% = 0 THEN
  1664. '$ifdef DEBUG
  1665.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1666. '$endif ''DEBUG
  1667.         ERROR STFERR
  1668.     ELSE
  1669.         IF cbBuf% > 255 THEN
  1670.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1671.             ERROR STFERR
  1672.         END IF
  1673.         szBuf$ = RTRIM$(szBuf$)
  1674.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1675.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1676.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1677.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1678.         END IF
  1679.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1680.             szBuf$ = szBuf$ + "\"
  1681.         END IF
  1682.         GetWindowsSysDir = szBuf$
  1683.     END IF
  1684.  
  1685.     szBuf$ = ""
  1686. END FUNCTION
  1687.  
  1688.  
  1689. '*************************************************************************
  1690. FUNCTION IsWindowsShared STATIC AS INTEGER
  1691.     szWin$ = UCASE$(GetWindowsDir())
  1692.     szSys$ = UCASE$(GetWindowsSysDir())
  1693.  
  1694.     IF len(szWin$) = 0 THEN
  1695. '$ifdef DEBUG
  1696.         StfApiErr saeFail, "IsWindowsShared", ""
  1697. '$endif ''DEBUG
  1698.         ERROR STFERR
  1699.     END IF
  1700.  
  1701.     IF len(szSys$) <= len(szWin$) THEN
  1702.         IsWindowsShared = 1
  1703.     ELSE
  1704.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1705.         IF szWin$ = szSys$ THEN
  1706.             IsWindowsShared = 0
  1707.         ELSE
  1708.             IsWindowsShared = 1
  1709.         END IF
  1710.     END IF
  1711. END FUNCTION
  1712.  
  1713.  
  1714. '*************************************************************************
  1715. FUNCTION GetScreenWidth STATIC AS INTEGER
  1716.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1717. END FUNCTION
  1718.  
  1719.  
  1720. '*************************************************************************
  1721. FUNCTION GetScreenHeight STATIC AS INTEGER
  1722.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1723. END FUNCTION
  1724.  
  1725.  
  1726. '*************************************************************************
  1727. SUB FlushIniFile (szFile$) STATIC
  1728.     n% = WritePrivateProfileString(NULL, NULL, NULL, szFile$)
  1729. END SUB
  1730.  
  1731.  
  1732. '*************************************************************************
  1733. SUB SetRestartDir (szDir$) STATIC
  1734. '$ifdef DEBUG
  1735.     if FValidFATDir(szDir$) = 0 then
  1736.         BadArgErr 1, "SetRestartDir", szDir$
  1737.     end if
  1738. '$endif ''DEBUG
  1739.     IF FSetRestartDir(szDir$) = 0 THEN
  1740. '$ifdef DEBUG
  1741.         StfApiErr saeFail, "SetRestartDir", szDir$
  1742. '$endif ''DEBUG
  1743.         ERROR STFERR
  1744.     END IF
  1745. END SUB
  1746.  
  1747.  
  1748. '*************************************************************************
  1749. FUNCTION RestartListEmpty STATIC AS INTEGER
  1750.     IF FRestartListEmpty() = 0 THEN
  1751.         RestartListEmpty = 0
  1752.     ELSE
  1753.         RestartListEmpty = 1
  1754.     END IF
  1755. END FUNCTION
  1756.  
  1757.  
  1758. '*************************************************************************
  1759. FUNCTION ExitExecRestart STATIC AS INTEGER
  1760.     ExitExecRestart = FExitExecRestart
  1761. END FUNCTION
  1762.  
  1763.  
  1764. '*************************************************************************
  1765. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1766.  
  1767. '$ifdef DEBUG
  1768.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1769.         n% = 1
  1770.     elseif FValidFATPath(szDst$) = 0 then
  1771.         n% = 2
  1772.     elseif FValidFATDir(szDir$) = 0 then
  1773.         n% = 3
  1774.     else
  1775.         n% = 0
  1776.     end if
  1777.     if n% > 0 then
  1778.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1779.     end if
  1780. '$endif ''DEBUG
  1781.  
  1782.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1783. '$ifdef DEBUG
  1784.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1785. '$endif ''DEBUG
  1786.         ERROR STFERR
  1787.     END IF
  1788. END SUB
  1789.  
  1790.  
  1791.  
  1792. '**************************************************************************
  1793. '***************************  Error Handlers  *****************************
  1794. '**************************************************************************
  1795.  
  1796.  
  1797. '$ifdef DEBUG
  1798. '**************************************************************************
  1799. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1800.     select case nMsg%
  1801.         case saeFail
  1802.             lpText$ = "Failed"
  1803.         case saeInit
  1804.             lpText$ = "Already Initialized"
  1805.         case saeNYI
  1806.             lpText$ = "NYI"
  1807.         case else
  1808.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1809.     end select
  1810.  
  1811.     lpText$ = lpText$ + ": "+ szApi$
  1812.     if szArgs$ <> "" then
  1813.         lpText$ = lpText + " (" + szArgs$ + ")"
  1814.     end if
  1815.     lpCaption$ = "MS-Setup Toolkit API Error"
  1816.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1817.     print lpText$
  1818.     lpText$ = ""
  1819.     lpCaption$ = ""
  1820. END SUB
  1821.  
  1822. '**************************************************************************
  1823. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1824.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1825.     ERROR STFERR
  1826. END SUB
  1827.  
  1828.  
  1829. '** REVIEW: Move this function into common lib (we'll need it there too)
  1830. '**************************************************************************
  1831. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1832.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1833.         FValidInfSect = 0
  1834.     else
  1835.         FValidInfSect = 1
  1836.     end if
  1837. END FUNCTION
  1838.  
  1839.  
  1840. '** REVIEW: Move this function into common lib (we'll need it there too)
  1841. '**************************************************************************
  1842. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1843.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1844.         FValidIniFile = 0
  1845.     else
  1846.         FValidIniFile = 1
  1847.     end if
  1848. END FUNCTION
  1849.  
  1850. '**************************************************************************
  1851. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1852.  
  1853.     if szDrive$ = "" then
  1854.         FValidDrive = 0
  1855.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1856.         FValidDrive = 1
  1857.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1858.         FValidDrive = 0
  1859.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1860.         FValidDrive = 0
  1861.     elseif LEN(szDrive$) = 1 then
  1862.         FValidDrive = 1
  1863.     elseif INSTR(2,szDrive$,":\") = 2 then
  1864.         FValidDrive = 1
  1865.     elseif INSTR(1,szDrive$,":") = 2 then
  1866.         FValidDrive = 1
  1867.     else
  1868.         FValidDrive = 0
  1869.     end if
  1870. END FUNCTION
  1871.  
  1872. '$endif ''DEBUG
  1873.  
  1874.  
  1875. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1876.  
  1877. End Trap
  1878.  
  1879. hSetup = InitSetup(COMMAND$)
  1880.  
  1881. ON ERROR GOTO QUIT
  1882.  
  1883.